#ifndef SOLVER_HPP_
#   define SOLVER_HPP_

#   include "VRPTW.hpp"
#   include "exc.hpp"
#   include "Solution.hpp"
#	include <cassert>

class Solver
{
    public:
        Solver(VRPTW&   inVRPTW)
            : soVRPTW(inVRPTW), soBestSolution(0)
        {}
        
        virtual void    execute() EXC_THROWER() = 0 ;
        
        Solution&	getBestSolution()
        {	
			assert(soBestSolution != 0);
			return	(*soBestSolution);
		}
        
        
        
    protected:
        VRPTW&      soVRPTW;
        Solution*   soBestSolution;
};

#endif
